package com.klm.easymq.core.adapter.config;

import lombok.Data;
import lombok.Builder;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;

import java.util.List;

/**
 * 消费者配置
 * 定义消费者相关的配置属性
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ConsumerConfig {
    
    /**
     * 消费者ID
     */
    private String consumerId;
    
    /**
     * 消费者组
     */
    private String group;
    
    /**
     * 主题列表
     */
    private List<String> topics;
    
    /**
     * 标签列表
     */
    private List<String> tags;
    
    /**
     * 批量拉取大小
     */
    @Builder.Default
    private Integer pullBatchSize = 10;
    
    /**
     * 消费超时时间（秒）
     */
    @Builder.Default
    private Integer consumeTimeout = 15;
    
    /**
     * 并发消费线程数
     */
    @Builder.Default
    private Integer concurrency = 1;
    
    /**
     * 最大并发消费线程数
     */
    @Builder.Default
    private Integer maxConcurrency = 20;
    
    /**
     * 消息监听器
     */
    private MessageListener messageListener;
    
    /**
     * 是否启用顺序消费
     */
    @Builder.Default
    private Boolean ordered = false;
    
    /**
     * 是否启用广播消费
     */
    @Builder.Default
    private Boolean broadcast = false;
    
    /**
     * 消息监听器接口
     */
    public interface MessageListener {
        
        /**
         * 处理消息
         * @param message 消息对象
         * @return 处理结果
         */
        boolean onMessage(com.klm.easymq.core.adapter.message.Message message);
        
        /**
         * 处理异常
         * @param message 消息对象
         * @param exception 异常
         */
        default void onException(com.klm.easymq.core.adapter.message.Message message, Exception exception) {
            // 默认异常处理逻辑
        }
    }
} 